package com.shujia.scala

import scala.io.Source

object Demo20WordCount {
  def main(args: Array[String]): Unit = {
    /**
     * 统计单纯的数量
     *
     */

    //链式调用
    //1、读取文件
    val lines: List[String] = Source.fromFile("data/words.txt").getLines().toList

    //2、将一行中的多个单纯展开，变成一个单词一行
    val words: List[String] = lines.flatMap((line: String) => line.split(","))

    //3、按照单词分组
    val groupBy: Map[String, List[String]] = words.groupBy((word: String) => word)

    //4、统计单词的数量
    val wordCount: Map[String, Int] = groupBy.map((kv: (String, List[String])) => {
      //分组单词
      val word: String = kv._1
      //组内所有的单词
      val values: List[String] = kv._2
      //计算单词的数量
      val count = values.length
      //返回单词和单词的数量
      (word, count)
    })

    //打印结果
    wordCount.foreach(println)


    println("=" * 100)

    /**
     * 简写
     * 链式调用
     *
     */

    Source
      .fromFile("data/words.txt")//读取文件
      .getLines()//获取所有行
      .toList//转换成集合
      .flatMap(_.split(","))//将数据展开
      .groupBy(w => w)//安装单词分组
      .map(kv => (kv._1, kv._2.length))//统计单词的数量
      .foreach(println)


  }

}
